package org.xiaov.common.util;

import org.xiaov.common.convert.ColumnType;

/**
 * <p>
 * 描述：
 * </p>
 *
 * @author xiaovcloud
 * @since 2021/9/16 23:51
 */
public class MySqlToJavaUtil {

    private static final String UNDER_LINE = "_";

    /**
     * <p>说明:获取java类名</p>
     *
     * @param table 表名
     * @return String
     */
    public static String getClassName(String table, String tablePrefix) {
        //截取前缀后的名字
        if (StringUtil.isNotNullOrNotEmpty(tablePrefix)) {
            int count = table.indexOf(tablePrefix) + tablePrefix.length();
            table = table.substring(count);
        }
        //如果第一个是下划线_,去掉下划线
        while (UNDER_LINE.equals(table.substring(0, 1))) {
            table = table.substring(1);
        }
        table = changeToJavaFiled(table, true);
        StringBuilder sbuilder = new StringBuilder();
        char[] cs = table.toCharArray();
        cs[0] -= 32;
        sbuilder.append(String.valueOf(cs));
        return sbuilder.toString();
    }

    /**
     * <p>说明:获取字段名，把"_"后面字母变大写</p>
     *
     * @param field 字段名
     * @return String
     */
//    public static String changeToJavaFiled(String field) {
//        String[] fields = field.split("_");
//        StringBuilder sbuilder = new StringBuilder(fields[0]);
//        for (int i = 1; i < fields.length; i++) {
//            char[] cs = fields[i].toCharArray();
//            cs[0] -= 32;
//            sbuilder.append(String.valueOf(cs));
//        }
//        return sbuilder.toString();
//    }

    /**
     * <p>说明:获取字段名</p>
     *
     * @param field               字段名
     * @param underLine2CamelCase 是否开启驼峰
     * @return String
     */
    public static String changeToJavaFiled(String field, Boolean underLine2CamelCase) {

        if (underLine2CamelCase == null || underLine2CamelCase) {
            String[] fields = field.split("_");
            StringBuilder builder = new StringBuilder(fields[0]);
            for (int i = 1; i < fields.length; i++) {
                char[] cs = fields[i].toCharArray();
                cs[0] -= 32;
                builder.append(String.valueOf(cs));
            }
            return builder.toString();
        }
        return lowFirstLetter(field);
    }

    /**
     * 将字符串的第一个字母小写
     *
     * @param field 字段名
     * @return String
     */
    public static String lowFirstLetter(String field) {
        return field.substring(0, 1).toLowerCase() + field.substring(1);
    }


    /**
     * <p>说明:把sql的数据类型转为java需要的类型</p>
     *
     * @param sqlType sql类型
     * @return String  java类型
     */
    public static String jdbcTypeToJavaType(String sqlType) {
        ColumnType type = ColumnType.getType(sqlType);
        return type.getJavaColumn();
    }

    /**
     * <p>说明:把sql的数据类型转为java需要的类型</p>
     *
     * @param sqlType sql类型
     * @return String  java类型
     */
    public static String jdbcTypeToJavaTypePck(String sqlType) {
        ColumnType type = ColumnType.getType(sqlType);
        return type.getPackPath();
    }
}
